/**
    算法描述：
    核心问题：
    解决所需数据结构+算法：
**/
#include<iostream>
#include<queue>
using namespace std;
struct CompareMin{
    bool operator()(int a, int b) {return a > b;}
};

int n;
// priority_queue<int, vector<int>, greater<int>> q;
priority_queue<int, vector<int>, CompareMin> q;

int main() {
    int a, ans = 0;
    cin >> n;
    for(int i=0; i<n; i++) {
        cin >> a;
        q.push(a);
    }
    while(q.size() > 1) {
        int x = q.top();
        q.pop();
        int y = q.top();
        q.pop();
        ans += x + y;
        q.push(x + y);
    }
    cout << ans << endl;
    return 0;
}